From: Florian Müllner Date: Wed, 9 Feb 2011 15:00:29 +0000 (+0100) Subject: workspace-switcher: Switch to vertical orientation X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~9077 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ef8c9e0abbee3373d8f47c4318e3dbd16433a4a8;p=gnome-shell.git workspace-switcher: Switch to vertical orientation With workspaces now being stacked vertically, the horizontal indicators in the workspace switcher are rather odd. There are some designs for an improved workspace switch animation, but it may take a while to implement them, so for now just change the orientation of the existing switcher. https://bugzilla.gnome.org/show_bug.cgi?id=641931 --- diff --git a/data/Makefile.am b/data/Makefile.am index 4235d5069..b5d0dc626 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -52,8 +52,8 @@ dist_theme_DATA = \ theme/toggle-off-intl.svg \ theme/toggle-on-us.svg \ theme/toggle-on-intl.svg \ - theme/ws-switch-arrow-left.svg \ - theme/ws-switch-arrow-right.svg + theme/ws-switch-arrow-up.svg \ + theme/ws-switch-arrow-down.svg gsettings_SCHEMAS = \ org.gnome.accessibility.magnifier.gschema.xml \ diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css index df481d82b..6ed28041f 100644 --- a/data/theme/gnome-shell.css +++ b/data/theme/gnome-shell.css @@ -1105,19 +1105,19 @@ StTooltip StLabel { spacing: 8px; } -.ws-switcher-active-left { +.ws-switcher-active-up { height: 100px; border: 0px; background: rgba(255,255,255,0.5); - background-image: url("ws-switch-arrow-left.svg"); + background-image: url("ws-switch-arrow-up.svg"); border-radius: 8px; } -.ws-switcher-active-right { +.ws-switcher-active-down { height: 100px; border: 0px; background: rgba(255,255,255,0.5); - background-image: url("ws-switch-arrow-right.svg"); + background-image: url("ws-switch-arrow-down.svg"); border-radius: 8px; } diff --git a/data/theme/ws-switch-arrow-down.svg b/data/theme/ws-switch-arrow-down.svg new file mode 100644 index 000000000..e8d13eb51 --- /dev/null +++ b/data/theme/ws-switch-arrow-down.svg @@ -0,0 +1,376 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/theme/ws-switch-arrow-left.svg b/data/theme/ws-switch-arrow-left.svg deleted file mode 100644 index a1e1b9cf0..000000000 --- a/data/theme/ws-switch-arrow-left.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/data/theme/ws-switch-arrow-right.svg b/data/theme/ws-switch-arrow-right.svg deleted file mode 100644 index 03d7f8350..000000000 --- a/data/theme/ws-switch-arrow-right.svg +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/theme/ws-switch-arrow-up.svg b/data/theme/ws-switch-arrow-up.svg new file mode 100644 index 000000000..16240e826 --- /dev/null +++ b/data/theme/ws-switch-arrow-up.svg @@ -0,0 +1,447 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 51fd17db6..328ccb6f8 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -556,7 +556,7 @@ WindowManager.prototype = { global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time()); if (!Main.overview.visible) - this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, indexToActivate); + this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.UP, indexToActivate); }, actionMoveWorkspaceRight: function() { @@ -572,7 +572,7 @@ WindowManager.prototype = { global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time()); if (!Main.overview.visible) - this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, indexToActivate); + this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.DOWN, indexToActivate); }, actionMoveWorkspaceUp: function() { @@ -585,7 +585,7 @@ WindowManager.prototype = { global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time()); if (!Main.overview.visible) - this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, indexToActivate); + this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.UP, indexToActivate); }, actionMoveWorkspaceDown: function() { @@ -598,6 +598,6 @@ WindowManager.prototype = { global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time()); if (!Main.overview.visible) - this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, indexToActivate); + this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.DOWN, indexToActivate); } }; diff --git a/js/ui/workspaceSwitcherPopup.js b/js/ui/workspaceSwitcherPopup.js index afa947790..ab1893372 100644 --- a/js/ui/workspaceSwitcherPopup.js +++ b/js/ui/workspaceSwitcherPopup.js @@ -12,8 +12,8 @@ const Tweener = imports.ui.tweener; const ANIMATION_TIME = 0.1; const DISPLAY_TIMEOUT = 600; -const LEFT = -1; -const RIGHT = 1; +const UP = -1; +const DOWN = 1; function WorkspaceSwitcherPopup() { this._init(); @@ -32,6 +32,8 @@ WorkspaceSwitcherPopup.prototype = { this._container = new St.BoxLayout({ style_class: 'workspace-switcher-container' }); this._list = new Shell.GenericContainer({ style_class: 'workspace-switcher' }); this._itemSpacing = 0; + this._childHeight = 0; + this._childWidth = 0; this._list.connect('style-changed', Lang.bind(this, function() { this._itemSpacing = this._list.get_theme_node().get_length('spacing'); })); @@ -51,59 +53,54 @@ WorkspaceSwitcherPopup.prototype = { this._timeoutId = Mainloop.timeout_add(DISPLAY_TIMEOUT, Lang.bind(this, this._onTimeout)); }, - _getPreferredWidth : function (actor, forHeight, alloc) { + _getPreferredHeight : function (actor, forWidth, alloc) { let children = this._list.get_children(); let primary = global.get_primary_monitor(); - let availwidth = primary.width; - availwidth -= this.actor.get_theme_node().get_horizontal_padding(); - availwidth -= this._container.get_theme_node().get_horizontal_padding(); - availwidth -= this._list.get_theme_node().get_horizontal_padding(); + let availHeight = primary.height; + availHeight -= Main.panel.actor.height; + availHeight -= this.actor.get_theme_node().get_vertical_padding(); + availHeight -= this._container.get_theme_node().get_vertical_padding(); + availHeight -= this._list.get_theme_node().get_vertical_padding(); - let width = 0; + let height = 0; for (let i = 0; i < children.length; i++) { - let [childMinWidth, childNaturalWidth] = children[i].get_preferred_width(-1); - let [childMinHeight, childNaturalHeight] = children[i].get_preferred_height(childNaturalWidth); - width += childNaturalHeight * primary.width / primary.height; + let [childMinHeight, childNaturalHeight] = children[i].get_preferred_height(-1); + let [childMinWidth, childNaturalWidth] = children[i].get_preferred_width(childNaturalHeight); + height += childNaturalHeight * primary.width / primary.height; } let spacing = this._itemSpacing * (global.screen.n_workspaces - 1); - width += spacing; - width = Math.min(width, availwidth); + height += spacing; + height = Math.min(height, availHeight); - this._childWidth = (width - spacing) / global.screen.n_workspaces; + this._childHeight = (height - spacing) / global.screen.n_workspaces; - alloc.min_size = width; - alloc.natural_size = width; + alloc.min_size = height; + alloc.natural_size = height; }, - _getPreferredHeight : function (actor, forWidth, alloc) { + _getPreferredWidth : function (actor, forHeight, alloc) { let primary = global.get_primary_monitor(); - this._childHeight = Math.round(this._childWidth * primary.height / primary.width); + this._childWidth = Math.round(this._childHeight * primary.width / primary.height); - alloc.min_size = this._childHeight; - alloc.natural_size = this._childHeight; + alloc.min_size = this._childWidth; + alloc.natural_size = this._childWidth; }, _allocate : function (actor, box, flags) { let children = this._list.get_children(); let childBox = new Clutter.ActorBox(); - let rtl = (St.Widget.get_default_direction() == St.TextDirection.RTL); - let x = box.x1; - let prevChildBoxX2 = box.x1 - this._itemSpacing; + let y = box.y1; + let prevChildBoxY2 = box.y1 - this._itemSpacing; for (let i = 0; i < children.length; i++) { - childBox.x1 = prevChildBoxX2 + this._itemSpacing; - childBox.x2 = Math.round(x + this._childWidth); - childBox.y1 = box.y1; - childBox.y2 = box.y1 + this._childHeight; - x += this._childWidth + this._itemSpacing; - prevChildBoxX2 = childBox.x2; - if (rtl) { - let ltrChildBoxX1 = childBox.x1; - childBox.x1 = box.x2 - (childBox.x2 - box.x1); - childBox.x2 = box.x2 - (ltrChildBoxX1 - box.x1); - } + childBox.x1 = box.x1; + childBox.x2 = box.x1 + this._childWidth; + childBox.y1 = prevChildBoxY2 + this._itemSpacing; + childBox.y2 = Math.round(y + this._childHeight); + y += this._childHeight + this._itemSpacing; + prevChildBoxY2 = childBox.y2; children[i].allocate(childBox, flags); } }, @@ -114,10 +111,10 @@ WorkspaceSwitcherPopup.prototype = { for (let i = 0; i < global.screen.n_workspaces; i++) { let indicator = null; - if (i == activeWorkspaceIndex && direction == LEFT) - indicator = new St.Bin({ style_class: 'ws-switcher-active-left' }); - else if(i == activeWorkspaceIndex && direction == RIGHT) - indicator = new St.Bin({ style_class: 'ws-switcher-active-right' }); + if (i == activeWorkspaceIndex && direction == UP) + indicator = new St.Bin({ style_class: 'ws-switcher-active-up' }); + else if(i == activeWorkspaceIndex && direction == DOWN) + indicator = new St.Bin({ style_class: 'ws-switcher-active-down' }); else indicator = new St.Bin({ style_class: 'ws-switcher-box' }); @@ -129,7 +126,8 @@ WorkspaceSwitcherPopup.prototype = { _position: function() { let primary = global.get_primary_monitor(); this._container.x = primary.x + Math.floor((primary.width - this._container.width) / 2); - this._container.y = primary.y + Math.floor((primary.height - this._container.height) / 2); + this._container.y = primary.y + Main.panel.actor.height + + Math.floor(((primary.height - Main.panel.actor.height) - this._container.height) / 2); }, _show : function() {